package com.example.zxd;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 小明算树<p>
 * 描述：
 * 小明家住在一条长为 l
 *  的马路的一边，马路上有一排树，每两棵相邻的树之间的间隔都是 1
 *  米。我们可以把马路看成一个数轴，马路的一端在数轴 0
 *  的位置，另一端在 l
 *  的位置；数轴上的每个整数点，即 0,1,2,…,l
 * ，都种有一棵树。
 *<p>
 * 最近，由于道路拓宽和地铁建设，马路上一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数，区域之间可能有重合的部分。
 *<p>
 * 现在施工单位要把这些区域中的树（包括区域端点处的两棵树）移走，而好奇的小明想知道将这些树都移走后，马路上还有多少棵树。
 *<p>
 * 输入：
 * 第一行两个整数，分别表示马路的长度 l
 *  和区域的数目 m
 * ，题目保证 1≤l≤10^4
 * ，1≤m≤100
 * 。
 *<p>
 * 接下来 m
 *  行，每行两个整数 u,v
 * ，表示一个区域的起始点和终止点的坐标，题目保证 0≤u≤v≤l
 * 。
 *<p>
 * 输出：
 * 输出一行，共一个整数，表示将这些树都移走后，马路上剩余的树木数量。
 *<p>
 * 样例输入：<p>
 * 500 3<p>
 * 150 300<p>
 * 100 200<p>
 * 470 471<p>
 * 样例输出：<p>
 * 298<p>
 * 注释：<p>
 * 题目保证，对于 13
 *  的数据，区域之间没有重合。
 *<p>
 * 题目保证，对于 100%
 *  的数据，有 1≤l≤104
 * ，1≤m≤100
 * ，0≤u≤v≤l
 * 。
 * @author: scarborough
 * @datetime: 2025/3/19 - 19:45
 * @status: AC
 */
public class PROB1022 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int l = sc.nextInt();
        int m = sc.nextInt();
        int[] arr = new int[l +1];
        Arrays.fill(arr, 1);
        for (int i = 0; i < m; i++) {
            int u = sc.nextInt();;
            int v = sc.nextInt();
            for (int j = u; j < v + 1; j++) {
                arr[j] = 0;
            }
        }
        int res = 0;
        for (int i = 0; i < arr.length; i++) {
            res +=arr[i];
        }
        System.out.println(res);
    }
}
